package org.lisy.java.collection;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetOperate {

	public static void main(String[] args) {
		/**
		 * TreeSet采用红黑树存储
		 * TreeSet保证元素唯一性的是compareTo方法return 0;
		 * TreeSet排序的第一种方式，让元素自身具备比较性，元素需要实现Comparable 接口，覆盖compareTo方法，这种也称为元素的自然顺序（升序）
		 */
		TreeSet<Object> set = new TreeSet<>(new StringLengthComparator());
		set.add("44444");
		set.add("22");
		set.add("333");
		set.add("1");

		Iterator<Object> iterator = set.iterator();

		while (iterator.hasNext()) {
			sop(iterator.next());
		}
	}

	public static void sop(Object obj) {
		System.out.println(obj);

	}
}

//定义比较性
class StringLengthComparator implements Comparator<Object> {

	@Override
	public int compare(Object o1, Object o2) {

		String s1 = (String) o1;
		String s2 = (String) o2;

		/**
		 * 如果要按照升序排序，则o1 小于o2，返回-1（负数），相等返回0，01大于02返回1（正数）
		 * 如果要按照降序排序则o1 小于o2，返回1（正数），相等返回0，01大于02返回-1（负数）
		 */
		if (s1.length() > s2.length())
			return 1;
		if (s1.length() == s2.length())
			return 0;
		return -1;

	}

}
